package com.hyxt.provider;

import com.hyxt.dao.CoherenceServiceDAO;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
import com.tangosol.util.Filter;
import com.tangosol.util.QueryHelper;


import java.util.Map;
import java.util.Set;


/**
 * @author zhangcx
 * @version v1.0
 * @Description
 * @Date: Create in 18:01 2017/11/22
 * @Modifide By:
 **/
//@Service(interfaceClass = CoherenceServiceDAO.class,version = "1.0.0")
public class ICoherenceServiceDAOImpl implements CoherenceServiceDAO{
    //定义缓存
    private NamedCache cache;
    /**
     * 存入/更新缓存中的数据
     * @param key   关键字
     * @param value    String值
     * @param cacheName    缓存名称
     * @return
     */
    @Override
    public Boolean putDO(Object key, Object value, String cacheName) {
        if(cacheName!=null && !"".equals(cacheName)){
            cache = CacheFactory.getCache(cacheName);
        }
        try {
            if(key!=null && !"".equals(key)){
                cache.put(key,value);
            }
            return true;
        }catch (Exception e){
            return false;
        }
    }

    /**
     * 获得缓存中的数据
     * @param key  查询关键字
     * @param cacheName   缓存名称
     * @return   对应的对象
     */
    @Override
    public Object getDO(Object key, String cacheName) {
        if(cacheName!=null && !"".equals(cacheName)){
            cache = CacheFactory.getCache(cacheName);
        }
        try {
            if(key!=null && !"".equals(key)){
                return cache.get(key);
            }
        }catch (Exception e){

        }
        return null;
    }
    /**
     * 删除数据
     * @param key   关键字
     * @param cacheName   缓存名称
     * @return   boolean
     */
    @Override
    public Boolean removeDO(Object key, String cacheName) {
        if(cacheName!=null && !"".equals(cacheName)){
            cache = CacheFactory.getCache(cacheName);
        }
        try {
            if(key!=null && !"".equals(key)){
                cache.remove(key);
            }
            return true;
        }catch (Exception e){
            return false;
        }
    }
    /**
     * 批量插入/更新数据
     * @param map   对应的数据形式（key = value）
     * @param cacheName  缓存名称
     * @return   Boolean
     */
    @Override
    public Boolean putAllDO(Map map,String cacheName) {
        if(cacheName!=null && !"".equals(cacheName)){
            cache = CacheFactory.getCache(cacheName);
        }
        try{
            cache.putAll(map);
            return true;
        }catch (Exception e){

        }
        return false;
    }
    /**
     * 根据cohql语句进行查询缓存中的相关数据
     * @param cohql   coherence 缓存像数据库一样进行查询的cohql语句
     * @param parameters  条件参数
     * @param cacheName  缓存名称
     * @return   缓存中value的值条件匹配上的数据 set集合（如果cohql与参数条件都为空值，则查询全部数据）
     */
    @Override
    public Set<Map.Entry<Object, Object>> getCohqlDO(String cohql,Object[] parameters, String cacheName) {
        if(cacheName!=null && !"".equals(cacheName)){
            cache = CacheFactory.getCache(cacheName);
        }
        Set<Map.Entry<Object, Object>> res = null;
        try {
            if (!"".equals(cohql) && parameters.length<=0){
                // 这是一个貌似很高深的过滤器，coherence提供的，表示通过车辆类型获取参数集合
                Filter file = QueryHelper.createFilter(cohql, parameters);
                // 缓存可以通过过滤器像sql一样把数据查询出来
                res = cache.entrySet(file);
                    return res;
            }else{
                //查询全部数据
                res = cache.entrySet();
                return res;
            }

        }catch (Exception e){

        }
        return null;
    }
}
